package com.kkwrite.regimen.provider.service.point;

import com.kkwrite.regimen.common.entity.dto.OutDTO;
import com.kkwrite.regimen.common.entity.dto.point.PageablePointRecordOutDTO;
import com.kkwrite.regimen.common.entity.dto.point.PageablePointRecordOutDTO.OutData;

/**
 * Created by lisha on 2018/7/21 18:04.
 *
 * @author lisha
 */
public interface PointService {
    /**
     * 分页查询积分记录
     *
     * @param page     页码
     * @param size     每页大小
     * @param userId   用户ID
     * @param sortType 排序类型
     * @return OutDTO&lt;PageablePointRecordOutDTO&gt;
     */
    OutDTO<PageablePointRecordOutDTO> listRecords(Integer page, Integer size, Integer userId, Integer sortType);

    /**
     * 查询用户总积分
     *
     * @param userId 用户ID
     * @return 总积分
     */
    OutData queryPointTotal(Integer userId);

    /**
     * 用户新增积分
     *
     * @param userId      用户ID
     * @param pointValue  新增积分值（可以为负数，为负数表示消费积分）
     * @param pointSource 积分来源描述
     */
    void addPointRecord(int userId, int pointValue, String pointSource);

    /**
     * 用户分享新增积分
     *
     * @param userId      用户ID
     * @param pointValue  新增积分值（可以为负数，为负数表示消费积分）
     * @param pointSource 积分来源描述
     * @param type        分享类型
     * @param itemId      分享的项目Id，只有在分享项目时是一个有效值
     */
    void addSharePointRecord(int userId, int pointValue, String pointSource, short type, String itemId);
}
